From 87c010b683c219ffcc71198e520185b2f1dce950 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Wed, 25 Mar 2015 21:06:18 -0500 Subject: [PATCH] add --target flag support to cargo doc closes #1427 --- src/bin/doc.rs | 4 +++- src/cargo/ops/cargo_rustc/mod.rs | 13 ++++++++++--- tests/test_cargo_doc.rs | 25 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/bin/doc.rs b/src/bin/doc.rs index 6524ff52d..ed05f9f55 100644 --- a/src/bin/doc.rs +++ b/src/bin/doc.rs @@ -4,6 +4,7 @@ use cargo::util::important_paths::{find_root_manifest_for_cwd}; #[derive(RustcDecodable)] struct Options { + flag_target: Option, flag_features: Vec, flag_jobs: Option, flag_manifest_path: Option, @@ -28,6 +29,7 @@ Options: -j N, --jobs N The number of jobs to run in parallel --features FEATURES Space-separated list of features to also build --no-default-features Do not build the `default` feature + --target TRIPLE Build for the target triple --manifest-path PATH Path to the manifest to document -v, --verbose Use verbose output @@ -50,7 +52,7 @@ pub fn execute(options: Options, config: &Config) -> CliResult> { compile_opts: ops::CompileOptions { config: config, jobs: options.flag_jobs, - target: None, + target: options.flag_target.as_ref().map(|t| &t[..]), features: &options.flag_features, no_default_features: options.flag_no_default_features, spec: options.flag_package.as_ref().map(|s| &s[..]), diff --git a/src/cargo/ops/cargo_rustc/mod.rs b/src/cargo/ops/cargo_rustc/mod.rs index 542eeb123..bf0cadb6c 100644 --- a/src/cargo/ops/cargo_rustc/mod.rs +++ b/src/cargo/ops/cargo_rustc/mod.rs @@ -495,14 +495,21 @@ fn prepare_rustc(package: &Package, target: &Target, profile: &Profile, fn rustdoc(package: &Package, target: &Target, profile: &Profile, cx: &mut Context) -> CargoResult { let kind = Kind::Target; - let cx_root = cx.get_package(cx.resolve.root()).absolute_target_dir() - .join("doc"); + let mut doc_dir = cx.get_package(cx.resolve.root()).absolute_target_dir(); let mut rustdoc = try!(process(CommandType::Rustdoc, package, target, cx)); rustdoc.arg(&root_path(cx, package, target)) .cwd(cx.config.cwd()) - .arg("-o").arg(&cx_root) .arg("--crate-name").arg(&target.crate_name()); + if let Some(target) = cx.requested_target() { + rustdoc.arg("--target").arg(target); + doc_dir.push(target); + } + + doc_dir.push("doc"); + + rustdoc.arg("-o").arg(&doc_dir); + match cx.resolve.features(package.package_id()) { Some(features) => { for feat in features { diff --git a/tests/test_cargo_doc.rs b/tests/test_cargo_doc.rs index 8f0c23ce6..fe0647179 100644 --- a/tests/test_cargo_doc.rs +++ b/tests/test_cargo_doc.rs @@ -262,3 +262,28 @@ test!(doc_same_name { assert_that(p.cargo_process("doc"), execs().with_status(0)); }); + +test!(doc_target { + const TARGET: &'static str = "arm-unknown-linux-gnueabihf"; + + let p = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + "#) + .file("src/lib.rs", r#" + #![feature(no_std)] + #![no_std] + + extern { + pub static A: u32; + } + "#); + + assert_that(p.cargo_process("doc").arg("--target").arg(TARGET).arg("--verbose"), + execs().with_status(0)); + assert_that(&p.root().join(&format!("target/{}/doc", TARGET)), existing_dir()); + assert_that(&p.root().join(&format!("target/{}/doc/foo/index.html", TARGET)), existing_file()); +}); -- 2.30.2